
package org.masterinftel.scrumpmt.activities;

import org.masterinftel.scrumpmt.Constants;
import org.masterinftel.scrumpmt.R;
import org.masterinftel.scrumpmt.ScrumApplication;
import org.masterinftel.scrumpmt.json.model.UserRequest;
import org.masterinftel.scrumpmt.json.model.UserResponse;
import org.masterinftel.scrumpmt.protocol.Protocol;
import org.masterinftel.scrumpmt.util.UtilNetwork;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

public class LoginActivity extends Activity {
    private ProgressDialog progressDialog;
    private EditText txtUsuario;
    private EditText txtPassword;
    private TextView txtMessage;
    private Context ctx;
    private UserResponse respuesta;
    private ScrumApplication application;

    // Manejador asincrono de las peticiones de login
    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            if (respuesta.valido) {
                application.setSessionID(respuesta.sessionID);
                application.setProductos(respuesta.lProductos);
                application.setAdmin(respuesta.admin);
                
                // No hay ningun producto asociado al usuario
                if (respuesta.lProductos.size() == 0) {
                    startActivity(new Intent(ctx, NewProductActivity.class));
                } else {
                    startActivity(new Intent(ctx, ProductsListActivity.class));
                }
            } else {
                txtMessage.setText("Login Invalido.");
            }
        }

    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.control_login);
        setTitle("Bienvenido a ScrumPMT");
        // creamos variables utiles para la aplicacion
        ctx = this;
        application = (ScrumApplication) getApplication();

        // asignamos los componentes
        Button btnAceptar = (Button) findViewById(R.id.BtnAceptar);
        txtUsuario = (EditText) findViewById(R.id.TxtUsuario);
        txtPassword = (EditText) findViewById(R.id.TxtPassword);
        txtMessage = (TextView) findViewById(R.id.txtMessage);

        // ESTO ES SOLO PARA AGILIZAR LAS PRUEBAS
        txtUsuario.setText("alberto@gmail.com");
        txtPassword.setText("alberto");

        btnAceptar.setOnClickListener(mLoginListener);
    }

    // Manejador del login
    OnClickListener mLoginListener = new OnClickListener() {
        @Override
        public void onClick(final View v) {
            progressDialog = ProgressDialog.show(ctx, "Conectando...", " Realizando login", true,
                    false);
            new Thread() {
                public void run() {
                    String usuario = txtUsuario.getText().toString();
                    String passwd = txtPassword.getText().toString();
                    UserRequest user = new UserRequest(usuario, passwd);

                    //Versi�n con preferencias
                    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
                    String URLFrontController = prefs.getString(Constants.KEY_URL_PREFERENCE, "");
                    String urlRest = URLFrontController + "?action=" + Protocol.LOGIN;
                    
                    //Versi�n sin preferences: se accede a trav�s de constante
            //        String urlRest = Constants.URL_FRONT_CONTROLLER + "?action=" + Protocol.LOGIN;

                    JsonReader reader = UtilNetwork.insertJSON(urlRest, user);
                    respuesta = new Gson().fromJson(reader,
                            UserResponse.class);
                    Log.w(Constants.LOGTAG, "Valido: " + respuesta.valido
                            + " - Sesion: " + respuesta.sessionID);
                    handler.sendEmptyMessage(0);
                }
            }.start();
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mainmenu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.mainMenuPlanningPoker:
                startActivity(new Intent(LoginActivity.this, PlanningPokerActivity.class));
                return true;
            case R.id.mainMenuPreferences:
                startActivity(new Intent(LoginActivity.this, PreferencesActivity.class));
                return true;    
            case R.id.mainMenuAbout:
                startActivity(new Intent(LoginActivity.this, AboutActivity.class));
                return true;    
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}
